home *** CD-ROM | disk | FTP | other *** search
/ Revista do CD-ROM 143 / cd-rom 143.iso / essenc / dotnet / prog02.exe / FL_InstallSqlStateTemplate_sql_____X86.3643236F_FC70_11D3_A536_0090278A1BB8 < prev    next >
Encoding:
Text File  |  2003-10-03  |  34.2 KB  |  1,109 lines

  1. /* First uninstall - this section is exactly the same as uninstall.sql */
  2. USE master
  3. GO
  4.  
  5. /*
  6.    InstallSqlStateTemplate.sql and UninstallSqlStateTemplate.sql are
  7.    templates files for installing the ASP.NET session state SQL objects
  8.    on a database other than the default 'ASPState'.
  9.  
  10.    To create your own script files based on the template:
  11.    1. Create your own script files by coping the two template files.
  12.    2. Decide a name for your database (e.g. MyASPStateDB)
  13.    3. In your own script files, replace all occurences of "DatabaseNamePlaceHolder"
  14.       by your database name.
  15.    4. Install and uninstall ASP.NET session state SQL objects using your own
  16.       script files.
  17. */
  18.  
  19. /* Drop the database containing our sprocs */
  20. IF DB_ID('DatabaseNamePlaceHolder') IS NOT NULL BEGIN
  21.     DROP DATABASE DatabaseNamePlaceHolder
  22. END
  23. GO
  24.  
  25. /* Drop the obsolete startup enabler */
  26. DECLARE @PROCID int
  27. SET @PROCID = OBJECT_ID('EnableASPStateStartup') 
  28. IF @PROCID IS NOT NULL AND OBJECTPROPERTY(@PROCID, 'IsProcedure') = 1 BEGIN
  29.     DROP PROCEDURE EnableASPStateStartup
  30. END
  31. GO
  32.  
  33. /* Drop the obsolete startup disabler */
  34. DECLARE @PROCID int
  35. SET @PROCID = OBJECT_ID('DisableASPStateStartup') 
  36. IF @PROCID IS NOT NULL AND OBJECTPROPERTY(@PROCID, 'IsProcedure') = 1 BEGIN
  37.     DROP PROCEDURE DisableASPStateStartup
  38. END
  39. GO
  40.  
  41. /* Drop the DatabaseNamePlaceHolder_DeleteExpiredSessions_Job */
  42. DECLARE @JobID BINARY(16)  
  43. SELECT @JobID = job_id     
  44. FROM   msdb.dbo.sysjobs    
  45. WHERE (name = N'DatabaseNamePlaceHolder_Job_DeleteExpiredSessions')       
  46. IF (@JobID IS NOT NULL)    
  47. BEGIN  
  48.     -- Check if the job is a multi-server job  
  49.     IF (EXISTS (SELECT  * 
  50.               FROM    msdb.dbo.sysjobservers 
  51.               WHERE   (job_id = @JobID) AND (server_id <> 0))) 
  52.     BEGIN 
  53.         -- There is, so abort the script 
  54.         RAISERROR (N'Unable to import job ''DatabaseNamePlaceHolder_Job_DeleteExpiredSessions'' since there is already a multi-server job with this name.', 16, 1) 
  55.     END 
  56.     ELSE 
  57.         -- Delete the [local] job 
  58.         EXECUTE msdb.dbo.sp_delete_job @job_name = N'DatabaseNamePlaceHolder_Job_DeleteExpiredSessions' 
  59. END
  60.  
  61. /* Create and populate the DatabaseNamePlaceHolder database */
  62. CREATE DATABASE DatabaseNamePlaceHolder
  63. GO
  64.  
  65. USE DatabaseNamePlaceHolder
  66. GO
  67.  
  68. /* Check to make sure the USE worked.  The CREATE DATABASE may have failed. */
  69. IF DB_NAME()<>'DatabaseNamePlaceHolder' BEGIN
  70.     RAISERROR('Error creating state database',20,1)  -- Sev 20 will terminate the connection
  71. END    
  72.  
  73. SET QUOTED_IDENTIFIER OFF 
  74. GO
  75. SET ANSI_NULLS ON 
  76. GO
  77.  
  78. CREATE PROCEDURE DropTempTables
  79. AS
  80.     IF OBJECT_ID('DatabaseNamePlaceHolder..ASPStateTempSessions','U') IS NOT NULL BEGIN
  81.         DROP TABLE DatabaseNamePlaceHolder..ASPStateTempSessions
  82.     END
  83.  
  84.     IF OBJECT_ID('DatabaseNamePlaceHolder..ASPStateTempApplications','U') IS NOT NULL BEGIN
  85.         DROP TABLE DatabaseNamePlaceHolder..ASPStateTempApplications
  86.     END
  87.  
  88.     RETURN 0
  89. GO
  90.  
  91. CREATE PROCEDURE GetMajorVersion
  92.     @@ver int output
  93. AS
  94. /* Find out the version */
  95.  
  96. IF OBJECT_ID('tempdb..#AspstateVer') IS NOT NULL BEGIN
  97.     DROP TABLE #AspstateVer
  98. END
  99.  
  100. CREATE TABLE #AspstateVer
  101. (
  102.     c1 INT,
  103.     c2 CHAR(100),
  104.     c3 CHAR(100),
  105.     version CHAR(100)
  106. )
  107.  
  108. INSERT INTO #AspstateVer
  109. EXEC master..xp_msver ProductVersion
  110.  
  111. DECLARE @version CHAR(100)
  112. DECLARE @dot INT
  113.  
  114. SELECT @version = version FROM #AspstateVer
  115. SELECT @dot = CHARINDEX('.', @version)
  116. SELECT @@ver = CONVERT(INT, SUBSTRING(@version, 1, @dot-1))
  117. GO   
  118.  
  119. /* Find out the version */
  120. DECLARE @ver INT
  121. EXEC GetMajorVersion @@ver=@ver OUTPUT
  122.  
  123. DECLARE @cmd CHAR(8000)
  124.  
  125. IF (@ver >= 8)
  126.     SET @cmd = '
  127.         CREATE PROCEDURE CreateTempTables
  128.         AS
  129.             CREATE TABLE DatabaseNamePlaceHolder..ASPStateTempSessions (
  130.                 SessionId           CHAR(32)        NOT NULL PRIMARY KEY,
  131.                 Created             DATETIME        NOT NULL DEFAULT GETUTCDATE(),
  132.                 Expires             DATETIME        NOT NULL,
  133.                 LockDate            DATETIME        NOT NULL,
  134.                 LockDateLocal       DATETIME        NOT NULL,
  135.                 LockCookie          INT             NOT NULL,
  136.                 Timeout             INT             NOT NULL,
  137.                 Locked              BIT             NOT NULL,
  138.                 SessionItemShort    VARBINARY(7000) NULL,
  139.                 SessionItemLong     IMAGE           NULL,
  140.             ) 
  141.  
  142.             CREATE TABLE DatabaseNamePlaceHolder..ASPStateTempApplications (
  143.                 AppId               INT             NOT NULL PRIMARY KEY,
  144.                 AppName             CHAR(280)       NOT NULL,
  145.             ) 
  146.  
  147.             CREATE NONCLUSTERED INDEX Index_AppName ON DatabaseNamePlaceHolder..ASPStateTempApplications(AppName)
  148.  
  149.             RETURN 0'
  150. ELSE
  151.     SET @cmd = '
  152.         CREATE PROCEDURE CreateTempTables
  153.         AS
  154.             CREATE TABLE DatabaseNamePlaceHolder..ASPStateTempSessions (
  155.                 SessionId           CHAR(32)        NOT NULL PRIMARY KEY,
  156.                 Created             DATETIME        NOT NULL DEFAULT GETDATE(),
  157.                 Expires             DATETIME        NOT NULL,
  158.                 LockDate            DATETIME        NOT NULL,
  159.                 LockCookie          INT             NOT NULL,
  160.                 Timeout             INT             NOT NULL,
  161.                 Locked              BIT             NOT NULL,
  162.                 SessionItemShort    VARBINARY(7000) NULL,
  163.                 SessionItemLong     IMAGE           NULL,
  164.             ) 
  165.  
  166.             CREATE TABLE DatabaseNamePlaceHolder..ASPStateTempApplications (
  167.                 AppId               INT             NOT NULL PRIMARY KEY,
  168.                 AppName             CHAR(280)       NOT NULL,
  169.             ) 
  170.  
  171.             CREATE NONCLUSTERED INDEX Index_AppName ON DatabaseNamePlaceHolder..ASPStateTempApplications(AppName)
  172.  
  173.             RETURN 0'
  174.  
  175. EXEC (@cmd)
  176. GO   
  177.  
  178. CREATE PROCEDURE ResetData
  179. AS
  180.     EXECUTE DropTempTables
  181.     EXECUTE CreateTempTables
  182.     RETURN 0
  183. GO
  184.    
  185. EXECUTE sp_addtype tSessionId, 'CHAR(32)',  'NOT NULL'
  186. GO
  187.  
  188. EXECUTE sp_addtype tAppName, 'VARCHAR(280)', 'NOT NULL'
  189. GO
  190.  
  191. EXECUTE sp_addtype tSessionItemShort, 'VARBINARY(7000)'
  192. GO
  193.  
  194. EXECUTE sp_addtype tSessionItemLong, 'IMAGE'
  195. GO
  196.  
  197. EXECUTE sp_addtype tTextPtr, 'VARBINARY(16)'
  198. GO
  199.  
  200. CREATE PROCEDURE GetHashCode
  201.     @input tAppName,
  202.     @hash INT OUTPUT
  203. AS
  204.     /* 
  205.        This sproc is based on this C# hash function:
  206.  
  207.         int GetHashCode(string s)
  208.         {
  209.             int     hash = 5381;
  210.             int     len = s.Length;
  211.  
  212.             for (int i = 0; i < len; i++) {
  213.                 int     c = Convert.ToInt32(s[i]);
  214.                 hash = ((hash << 5) + hash) ^ c;
  215.             }
  216.  
  217.             return hash;
  218.         }
  219.  
  220.         However, SQL 7 doesn't provide a 32-bit integer
  221.         type that allows rollover of bits, we have to
  222.         divide our 32bit integer into the upper and lower
  223.         16 bits to do our calculation.
  224.     */
  225.        
  226.     DECLARE @hi_16bit   INT
  227.     DECLARE @lo_16bit   INT
  228.     DECLARE @hi_t       INT
  229.     DECLARE @lo_t       INT
  230.     DECLARE @len        INT
  231.     DECLARE @i          INT
  232.     DECLARE @c          INT
  233.     DECLARE @carry      INT
  234.  
  235.     SET @hi_16bit = 0
  236.     SET @lo_16bit = 5381
  237.     
  238.     SET @len = DATALENGTH(@input)
  239.     SET @i = 1
  240.     
  241.     WHILE (@i <= @len)
  242.     BEGIN
  243.         SET @c = ASCII(SUBSTRING(@input, @i, 1))
  244.  
  245.         /* Formula:                        
  246.            hash = ((hash << 5) + hash) ^ c */
  247.  
  248.         /* hash << 5 */
  249.         SET @hi_t = @hi_16bit * 32 /* high 16bits << 5 */
  250.         SET @hi_t = @hi_t & 0xFFFF /* zero out overflow */
  251.         
  252.         SET @lo_t = @lo_16bit * 32 /* low 16bits << 5 */
  253.         
  254.         SET @carry = @lo_16bit & 0x1F0000 /* move low 16bits carryover to hi 16bits */
  255.         SET @carry = @carry / 0x10000 /* >> 16 */
  256.         SET @hi_t = @hi_t + @carry
  257.         SET @hi_t = @hi_t & 0xFFFF /* zero out overflow */
  258.  
  259.         /* + hash */
  260.         SET @lo_16bit = @lo_16bit + @lo_t
  261.         SET @hi_16bit = @hi_16bit + @hi_t + (@lo_16bit / 0x10000)
  262.         /* delay clearing the overflow */
  263.  
  264.         /* ^c */
  265.         SET @lo_16bit = @lo_16bit ^ @c
  266.  
  267.         /* Now clear the overflow bits */    
  268.         SET @hi_16bit = @hi_16bit & 0xFFFF
  269.         SET @lo_16bit = @lo_16bit & 0xFFFF
  270.  
  271.         SET @i = @i + 1
  272.     END
  273.  
  274.     /* Do a sign extension of the hi-16bit if needed */
  275.     IF (@hi_16bit & 0x8000 <> 0)
  276.         SET @hi_16bit = 0xFFFF0000 | @hi_16bit
  277.  
  278.     /* Merge hi and lo 16bit back together */
  279.     SET @hi_16bit = @hi_16bit * 0x10000 /* << 16 */
  280.     SET @hash = @hi_16bit | @lo_16bit
  281.  
  282.     RETURN 0
  283. GO
  284.  
  285. CREATE PROCEDURE TempGetAppID
  286.     @appName    tAppName,
  287.     @appId      INT OUTPUT
  288. AS
  289.     SET @appName = LOWER(@appName)
  290.     SET @appId = NULL
  291.     
  292.     SELECT @appId = AppId
  293.     FROM DatabaseNamePlaceHolder..ASPStateTempApplications
  294.     WHERE AppName = @appName
  295.     
  296.     IF @appId IS NULL BEGIN
  297.         BEGIN TRAN        
  298.  
  299.         SELECT @appId = AppId
  300.         FROM DatabaseNamePlaceHolder..ASPStateTempApplications WITH (TABLOCKX)
  301.         WHERE AppName = @appName
  302.         
  303.         IF @appId IS NULL
  304.         BEGIN
  305.             EXEC GetHashCode @appName, @appId OUTPUT
  306.             
  307.             INSERT DatabaseNamePlaceHolder..ASPStateTempApplications
  308.             VALUES
  309.             (@appId, @appName)
  310.             
  311.             IF @@ERROR = 2627 
  312.             BEGIN
  313.                 DECLARE @dupApp tAppName
  314.             
  315.                 SELECT @dupApp = RTRIM(AppName)
  316.                 FROM DatabaseNamePlaceHolder..ASPStateTempApplications 
  317.                 WHERE AppId = @appId
  318.                 
  319.                 RAISERROR('SQL session state fatal error: hash-code collision between applications ''%s'' and ''%s''. Please rename the 1st application to resolve the problem.', 
  320.                             18, 1, @appName, @dupApp)
  321.             END
  322.         END
  323.  
  324.         COMMIT
  325.     END
  326.  
  327.     RETURN 0
  328. GO
  329.  
  330. /* Find out the version */
  331. DECLARE @ver INT
  332. EXEC GetMajorVersion @@ver=@ver OUTPUT
  333. DECLARE @cmd CHAR(8000)
  334. IF (@ver >= 8)
  335.     SET @cmd = '
  336.         CREATE PROCEDURE TempGetStateItem
  337.             @id         tSessionId,
  338.             @itemShort  tSessionItemShort OUTPUT,
  339.             @locked     BIT OUTPUT,
  340.             @lockDate   DATETIME OUTPUT,
  341.             @lockCookie INT OUTPUT
  342.         AS
  343.             DECLARE @textptr AS tTextPtr
  344.             DECLARE @length AS INT
  345.             DECLARE @now as DATETIME
  346.             SET @now = GETUTCDATE()
  347.  
  348.             UPDATE DatabaseNamePlaceHolder..ASPStateTempSessions
  349.             SET Expires = DATEADD(n, Timeout, @now), 
  350.                 @locked = Locked,
  351.                 @lockDate = LockDateLocal,
  352.                 @lockCookie = LockCookie,
  353.                 @itemShort = CASE @locked
  354.                     WHEN 0 THEN SessionItemShort
  355.                     ELSE NULL
  356.                     END,
  357.                 @textptr = CASE @locked
  358.                     WHEN 0 THEN TEXTPTR(SessionItemLong)
  359.                     ELSE NULL
  360.                     END,
  361.                 @length = CASE @locked
  362.                     WHEN 0 THEN DATALENGTH(SessionItemLong)
  363.                     ELSE NULL
  364.                     END
  365.             WHERE SessionId = @id
  366.             IF @length IS NOT NULL BEGIN
  367.                 READTEXT DatabaseNamePlaceHolder..ASPStateTempSessions.SessionItemLong @textptr 0 @length
  368.             END
  369.  
  370.             RETURN 0'
  371. ELSE
  372.     SET @cmd = '
  373.         CREATE PROCEDURE TempGetStateItem
  374.             @id         tSessionId,
  375.             @itemShort  tSessionItemShort OUTPUT,
  376.             @locked     BIT OUTPUT,
  377.             @lockDate   DATETIME OUTPUT,
  378.             @lockCookie INT OUTPUT
  379.         AS
  380.             DECLARE @textptr AS tTextPtr
  381.             DECLARE @length AS INT
  382.             DECLARE @now as DATETIME
  383.             SET @now = GETDATE()
  384.  
  385.             UPDATE DatabaseNamePlaceHolder..ASPStateTempSessions
  386.             SET Expires = DATEADD(n, Timeout, @now), 
  387.                 @locked = Locked,
  388.                 @lockDate = LockDate,
  389.                 @lockCookie = LockCookie,
  390.                 @itemShort = CASE @locked
  391.                     WHEN 0 THEN SessionItemShort
  392.                     ELSE NULL
  393.                     END,
  394.                 @textptr = CASE @locked
  395.                     WHEN 0 THEN TEXTPTR(SessionItemLong)
  396.                     ELSE NULL
  397.                     END,
  398.                 @length = CASE @locked
  399.                     WHEN 0 THEN DATALENGTH(SessionItemLong)
  400.                     ELSE NULL
  401.                     END
  402.             WHERE SessionId = @id
  403.             IF @length IS NOT NULL BEGIN
  404.                 READTEXT DatabaseNamePlaceHolder..ASPStateTempSessions.SessionItemLong @textptr 0 @length
  405.             END
  406.  
  407.             RETURN 0'
  408.     
  409. EXEC (@cmd)    
  410. GO
  411.  
  412. DECLARE @ver INT
  413. EXEC GetMajorVersion @@ver=@ver OUTPUT
  414. DECLARE @cmd CHAR(8000)
  415. IF (@ver >= 8)
  416.     SET @cmd = '
  417.         CREATE PROCEDURE TempGetStateItem2
  418.             @id         tSessionId,
  419.             @itemShort  tSessionItemShort OUTPUT,
  420.             @locked     BIT OUTPUT,
  421.             @lockAge    INT OUTPUT,
  422.             @lockCookie INT OUTPUT
  423.         AS
  424.             DECLARE @textptr AS tTextPtr
  425.             DECLARE @length AS INT
  426.             DECLARE @now as DATETIME
  427.             SET @now = GETUTCDATE()
  428.  
  429.             UPDATE DatabaseNamePlaceHolder..ASPStateTempSessions
  430.             SET Expires = DATEADD(n, Timeout, @now), 
  431.                 @locked = Locked,
  432.                 @lockAge = DATEDIFF(second, LockDate, @now),
  433.                 @lockCookie = LockCookie,
  434.                 @itemShort = CASE @locked
  435.                     WHEN 0 THEN SessionItemShort
  436.                     ELSE NULL
  437.                     END,
  438.                 @textptr = CASE @locked
  439.                     WHEN 0 THEN TEXTPTR(SessionItemLong)
  440.                     ELSE NULL
  441.                     END,
  442.                 @length = CASE @locked
  443.                     WHEN 0 THEN DATALENGTH(SessionItemLong)
  444.                     ELSE NULL
  445.                     END
  446.             WHERE SessionId = @id
  447.             IF @length IS NOT NULL BEGIN
  448.                 READTEXT DatabaseNamePlaceHolder..ASPStateTempSessions.SessionItemLong @textptr 0 @length
  449.             END
  450.  
  451.             RETURN 0'
  452.  
  453. EXEC (@cmd)    
  454. GO
  455.             
  456.  
  457. DECLARE @ver INT
  458. EXEC GetMajorVersion @@ver=@ver OUTPUT
  459. DECLARE @cmd CHAR(8000)
  460. IF (@ver >= 8)
  461.     SET @cmd = '
  462.         CREATE PROCEDURE TempGetStateItemExclusive
  463.             @id         tSessionId,
  464.             @itemShort  tSessionItemShort OUTPUT,
  465.             @locked     BIT OUTPUT,
  466.             @lockDate   DATETIME OUTPUT,
  467.             @lockCookie INT OUTPUT
  468.         AS
  469.             DECLARE @textptr AS tTextPtr
  470.             DECLARE @length AS INT
  471.             DECLARE @now as DATETIME
  472.             DECLARE @nowLocal as DATETIME
  473.  
  474.             SET @now = GETUTCDATE()
  475.             SET @nowLocal = GETDATE()
  476.             
  477.             UPDATE DatabaseNamePlaceHolder..ASPStateTempSessions
  478.             SET Expires = DATEADD(n, Timeout, @now), 
  479.                 LockDate = CASE Locked
  480.                     WHEN 0 THEN @now
  481.                     ELSE LockDate
  482.                     END,
  483.                 @lockDate = LockDateLocal = CASE Locked
  484.                     WHEN 0 THEN @nowLocal
  485.                     ELSE LockDateLocal
  486.                     END,
  487.                 @lockCookie = LockCookie = CASE Locked
  488.                     WHEN 0 THEN LockCookie + 1
  489.                     ELSE LockCookie
  490.                     END,
  491.                 @itemShort = CASE Locked
  492.                     WHEN 0 THEN SessionItemShort
  493.                     ELSE NULL
  494.                     END,
  495.                 @textptr = CASE Locked
  496.                     WHEN 0 THEN TEXTPTR(SessionItemLong)
  497.                     ELSE NULL
  498.                     END,
  499.                 @length = CASE Locked
  500.                     WHEN 0 THEN DATALENGTH(SessionItemLong)
  501.                     ELSE NULL
  502.                     END,
  503.                 @locked = Locked,
  504.                 Locked = 1
  505.             WHERE SessionId = @id
  506.             IF @length IS NOT NULL BEGIN
  507.                 READTEXT DatabaseNamePlaceHolder..ASPStateTempSessions.SessionItemLong @textptr 0 @length
  508.             END
  509.  
  510.             RETURN 0'
  511. ELSE
  512.     SET @cmd = '
  513.         CREATE PROCEDURE TempGetStateItemExclusive
  514.             @id         tSessionId,
  515.             @itemShort  tSessionItemShort OUTPUT,
  516.             @locked     BIT OUTPUT,
  517.             @lockDate   DATETIME OUTPUT,
  518.             @lockCookie INT OUTPUT
  519.         AS
  520.             DECLARE @textptr AS tTextPtr
  521.             DECLARE @length AS INT
  522.             DECLARE @now as DATETIME
  523.  
  524.             SET @now = GETDATE()
  525.             UPDATE DatabaseNamePlaceHolder..ASPStateTempSessions
  526.             SET Expires = DATEADD(n, Timeout, @now), 
  527.                 @lockDate = LockDate = CASE Locked
  528.                     WHEN 0 THEN @now
  529.                     ELSE LockDate
  530.                     END,
  531.                 @lockCookie = LockCookie = CASE Locked
  532.                     WHEN 0 THEN LockCookie + 1
  533.                     ELSE LockCookie
  534.                     END,
  535.                 @itemShort = CASE Locked
  536.                     WHEN 0 THEN SessionItemShort
  537.                     ELSE NULL
  538.                     END,
  539.                 @textptr = CASE Locked
  540.                     WHEN 0 THEN TEXTPTR(SessionItemLong)
  541.                     ELSE NULL
  542.                     END,
  543.                 @length = CASE Locked
  544.                     WHEN 0 THEN DATALENGTH(SessionItemLong)
  545.                     ELSE NULL
  546.                     END,
  547.                 @locked = Locked,
  548.                 Locked = 1
  549.             WHERE SessionId = @id
  550.             IF @length IS NOT NULL BEGIN
  551.                 READTEXT DatabaseNamePlaceHolder..ASPStateTempSessions.SessionItemLong @textptr 0 @length
  552.             END
  553.  
  554.             RETURN 0'    
  555.  
  556. EXEC (@cmd)    
  557. GO
  558.  
  559.  
  560. DECLARE @ver INT
  561. EXEC GetMajorVersion @@ver=@ver OUTPUT
  562. DECLARE @cmd CHAR(8000)
  563. IF (@ver >= 8)
  564.     SET @cmd = '
  565.         CREATE PROCEDURE TempGetStateItemExclusive2
  566.             @id         tSessionId,
  567.             @itemShort  tSessionItemShort OUTPUT,
  568.             @locked     BIT OUTPUT,
  569.             @lockAge    INT OUTPUT,
  570.             @lockCookie INT OUTPUT
  571.         AS
  572.             DECLARE @textptr AS tTextPtr
  573.             DECLARE @length AS INT
  574.             DECLARE @now as DATETIME
  575.             DECLARE @nowLocal as DATETIME
  576.  
  577.             SET @now = GETUTCDATE()
  578.             SET @nowLocal = GETDATE()
  579.             
  580.             UPDATE DatabaseNamePlaceHolder..ASPStateTempSessions
  581.             SET Expires = DATEADD(n, Timeout, @now), 
  582.                 LockDate = CASE Locked
  583.                     WHEN 0 THEN @now
  584.                     ELSE LockDate
  585.                     END,
  586.                 LockDateLocal = CASE Locked
  587.                     WHEN 0 THEN @nowLocal
  588.                     ELSE LockDateLocal
  589.                     END,
  590.                 @lockAge = CASE Locked
  591.                     WHEN 0 THEN 0
  592.                     ELSE DATEDIFF(second, LockDate, @now)
  593.                     END,
  594.                 @lockCookie = LockCookie = CASE Locked
  595.                     WHEN 0 THEN LockCookie + 1
  596.                     ELSE LockCookie
  597.                     END,
  598.                 @itemShort = CASE Locked
  599.                     WHEN 0 THEN SessionItemShort
  600.                     ELSE NULL
  601.                     END,
  602.                 @textptr = CASE Locked
  603.                     WHEN 0 THEN TEXTPTR(SessionItemLong)
  604.                     ELSE NULL
  605.                     END,
  606.                 @length = CASE Locked
  607.                     WHEN 0 THEN DATALENGTH(SessionItemLong)
  608.                     ELSE NULL
  609.                     END,
  610.                 @locked = Locked,
  611.                 Locked = 1
  612.             WHERE SessionId = @id
  613.             IF @length IS NOT NULL BEGIN
  614.                 READTEXT DatabaseNamePlaceHolder..ASPStateTempSessions.SessionItemLong @textptr 0 @length
  615.             END
  616.  
  617.             RETURN 0'
  618.  
  619. EXEC (@cmd)    
  620. GO
  621.  
  622.  
  623. DECLARE @ver INT
  624. EXEC GetMajorVersion @@ver=@ver OUTPUT
  625. DECLARE @cmd CHAR(8000)
  626. IF (@ver >= 8)
  627.     SET @cmd = '
  628.         CREATE PROCEDURE TempReleaseStateItemExclusive
  629.             @id         tSessionId,
  630.             @lockCookie INT
  631.         AS
  632.             UPDATE DatabaseNamePlaceHolder..ASPStateTempSessions
  633.             SET Expires = DATEADD(n, Timeout, GETUTCDATE()), 
  634.                 Locked = 0
  635.             WHERE SessionId = @id AND LockCookie = @lockCookie
  636.  
  637.             RETURN 0'
  638. ELSE
  639.     SET @cmd = '
  640.         CREATE PROCEDURE TempReleaseStateItemExclusive
  641.             @id         tSessionId,
  642.             @lockCookie INT
  643.         AS
  644.             UPDATE DatabaseNamePlaceHolder..ASPStateTempSessions
  645.             SET Expires = DATEADD(n, Timeout, GETDATE()), 
  646.                 Locked = 0
  647.             WHERE SessionId = @id AND LockCookie = @lockCookie
  648.  
  649.             RETURN 0'
  650.  
  651. EXEC (@cmd)    
  652. GO
  653.  
  654.  
  655. DECLARE @ver INT
  656. EXEC GetMajorVersion @@ver=@ver OUTPUT
  657. DECLARE @cmd CHAR(8000)
  658. IF (@ver >= 8)
  659.     SET @cmd = '
  660.         CREATE PROCEDURE TempInsertStateItemShort
  661.             @id         tSessionId,
  662.             @itemShort  tSessionItemShort,
  663.             @timeout    INT
  664.         AS    
  665.  
  666.             DECLARE @now as DATETIME
  667.             DECLARE @nowLocal as DATETIME
  668.             
  669.             SET @now = GETUTCDATE()
  670.             SET @nowLocal = GETDATE()
  671.  
  672.             INSERT DatabaseNamePlaceHolder..ASPStateTempSessions 
  673.                 (SessionId, 
  674.                  SessionItemShort, 
  675.                  Timeout, 
  676.                  Expires, 
  677.                  Locked, 
  678.                  LockDate,
  679.                  LockDateLocal,
  680.                  LockCookie) 
  681.             VALUES 
  682.                 (@id, 
  683.                  @itemShort, 
  684.                  @timeout, 
  685.                  DATEADD(n, @timeout, @now), 
  686.                  0, 
  687.                  @now,
  688.                  @nowLocal,
  689.                  1)
  690.  
  691.             RETURN 0'
  692. ELSE
  693.     SET @cmd = '
  694.         CREATE PROCEDURE TempInsertStateItemShort
  695.             @id         tSessionId,
  696.             @itemShort  tSessionItemShort,
  697.             @timeout    INT
  698.         AS    
  699.  
  700.             DECLARE @now as DATETIME
  701.             SET @now = GETDATE()
  702.  
  703.             INSERT DatabaseNamePlaceHolder..ASPStateTempSessions 
  704.                 (SessionId, 
  705.                  SessionItemShort, 
  706.                  Timeout, 
  707.                  Expires, 
  708.                  Locked, 
  709.                  LockDate,
  710.                  LockCookie) 
  711.             VALUES 
  712.                 (@id, 
  713.                  @itemShort, 
  714.                  @timeout, 
  715.                  DATEADD(n, @timeout, @now), 
  716.                  0, 
  717.                  @now,
  718.                  1)
  719.  
  720.             RETURN 0'
  721.  
  722. EXEC (@cmd)    
  723. GO
  724.  
  725.  
  726. DECLARE @ver INT
  727. EXEC GetMajorVersion @@ver=@ver OUTPUT
  728. DECLARE @cmd CHAR(8000)
  729. IF (@ver >= 8)
  730.     SET @cmd = '
  731.         CREATE PROCEDURE TempInsertStateItemLong
  732.             @id         tSessionId,
  733.             @itemLong   tSessionItemLong,
  734.             @timeout    INT
  735.         AS    
  736.             DECLARE @now as DATETIME
  737.             DECLARE @nowLocal as DATETIME
  738.             
  739.             SET @now = GETUTCDATE()
  740.             SET @nowLocal = GETDATE()
  741.  
  742.             INSERT DatabaseNamePlaceHolder..ASPStateTempSessions 
  743.                 (SessionId, 
  744.                  SessionItemLong, 
  745.                  Timeout, 
  746.                  Expires, 
  747.                  Locked, 
  748.                  LockDate,
  749.                  LockDateLocal,
  750.                  LockCookie) 
  751.             VALUES 
  752.                 (@id, 
  753.                  @itemLong, 
  754.                  @timeout, 
  755.                  DATEADD(n, @timeout, @now), 
  756.                  0, 
  757.                  @now,
  758.                  @nowLocal,
  759.                  1)
  760.  
  761.             RETURN 0'
  762. ELSE
  763.     SET @cmd = '
  764.         CREATE PROCEDURE TempInsertStateItemLong
  765.             @id         tSessionId,
  766.             @itemLong   tSessionItemLong,
  767.             @timeout    INT
  768.         AS    
  769.             DECLARE @now as DATETIME
  770.             SET @now = GETDATE()
  771.  
  772.             INSERT DatabaseNamePlaceHolder..ASPStateTempSessions 
  773.                 (SessionId, 
  774.                  SessionItemLong, 
  775.                  Timeout, 
  776.                  Expires, 
  777.                  Locked, 
  778.                  LockDate,
  779.                  LockCookie) 
  780.             VALUES 
  781.                 (@id, 
  782.                  @itemLong, 
  783.                  @timeout, 
  784.                  DATEADD(n, @timeout, @now), 
  785.                  0, 
  786.                  @now,
  787.                  1)
  788.  
  789.             RETURN 0'
  790.  
  791. EXEC (@cmd)    
  792. GO
  793.  
  794.  
  795. DECLARE @ver INT
  796. EXEC GetMajorVersion @@ver=@ver OUTPUT
  797. DECLARE @cmd CHAR(8000)
  798. IF (@ver >= 8)
  799.     SET @cmd = '
  800.         CREATE PROCEDURE TempUpdateStateItemShort
  801.             @id         tSessionId,
  802.             @itemShort  tSessionItemShort,
  803.             @timeout    INT,
  804.             @lockCookie INT
  805.         AS    
  806.             UPDATE DatabaseNamePlaceHolder..ASPStateTempSessions
  807.             SET Expires = DATEADD(n, Timeout, GETUTCDATE()), 
  808.                 SessionItemShort = @itemShort, 
  809.                 Timeout = @timeout,
  810.                 Locked = 0
  811.             WHERE SessionId = @id AND LockCookie = @lockCookie
  812.  
  813.             RETURN 0'
  814. ELSE
  815.     SET @cmd = '
  816.         CREATE PROCEDURE TempUpdateStateItemShort
  817.             @id         tSessionId,
  818.             @itemShort  tSessionItemShort,
  819.             @timeout    INT,
  820.             @lockCookie INT
  821.         AS    
  822.             UPDATE DatabaseNamePlaceHolder..ASPStateTempSessions
  823.             SET Expires = DATEADD(n, Timeout, GETDATE()), 
  824.                 SessionItemShort = @itemShort, 
  825.                 Timeout = @timeout,
  826.                 Locked = 0
  827.             WHERE SessionId = @id AND LockCookie = @lockCookie
  828.  
  829.             RETURN 0'
  830.  
  831. EXEC (@cmd)    
  832. GO
  833.  
  834.  
  835. DECLARE @ver INT
  836. EXEC GetMajorVersion @@ver=@ver OUTPUT
  837. DECLARE @cmd CHAR(8000)
  838. IF (@ver >= 8)
  839.     SET @cmd = '
  840.         CREATE PROCEDURE TempUpdateStateItemShortNullLong
  841.             @id         tSessionId,
  842.             @itemShort  tSessionItemShort,
  843.             @timeout    INT,
  844.             @lockCookie INT
  845.         AS    
  846.             UPDATE DatabaseNamePlaceHolder..ASPStateTempSessions
  847.             SET Expires = DATEADD(n, Timeout, GETUTCDATE()), 
  848.                 SessionItemShort = @itemShort, 
  849.                 SessionItemLong = NULL, 
  850.                 Timeout = @timeout,
  851.                 Locked = 0
  852.             WHERE SessionId = @id AND LockCookie = @lockCookie
  853.  
  854.             RETURN 0'
  855. ELSE
  856.     SET @cmd = '
  857.         CREATE PROCEDURE TempUpdateStateItemShortNullLong
  858.             @id         tSessionId,
  859.             @itemShort  tSessionItemShort,
  860.             @timeout    INT,
  861.             @lockCookie INT
  862.         AS    
  863.             UPDATE DatabaseNamePlaceHolder..ASPStateTempSessions
  864.             SET Expires = DATEADD(n, Timeout, GETDATE()), 
  865.                 SessionItemShort = @itemShort, 
  866.                 SessionItemLong = NULL, 
  867.                 Timeout = @timeout,
  868.                 Locked = 0
  869.             WHERE SessionId = @id AND LockCookie = @lockCookie
  870.  
  871.             RETURN 0'
  872.  
  873. EXEC (@cmd)    
  874. GO
  875.  
  876.  
  877. DECLARE @ver INT
  878. EXEC GetMajorVersion @@ver=@ver OUTPUT
  879. DECLARE @cmd CHAR(8000)
  880. IF (@ver >= 8)
  881.     SET @cmd = '
  882.         CREATE PROCEDURE TempUpdateStateItemLong
  883.             @id         tSessionId,
  884.             @itemLong   tSessionItemLong,
  885.             @timeout    INT,
  886.             @lockCookie INT
  887.         AS    
  888.             UPDATE DatabaseNamePlaceHolder..ASPStateTempSessions
  889.             SET Expires = DATEADD(n, Timeout, GETUTCDATE()), 
  890.                 SessionItemLong = @itemLong,
  891.                 Timeout = @timeout,
  892.                 Locked = 0
  893.             WHERE SessionId = @id AND LockCookie = @lockCookie
  894.  
  895.             RETURN 0'
  896. ELSE
  897.     SET @cmd = '
  898.         CREATE PROCEDURE TempUpdateStateItemLong
  899.             @id         tSessionId,
  900.             @itemLong   tSessionItemLong,
  901.             @timeout    INT,
  902.             @lockCookie INT
  903.         AS    
  904.             UPDATE DatabaseNamePlaceHolder..ASPStateTempSessions
  905.             SET Expires = DATEADD(n, Timeout, GETDATE()), 
  906.                 SessionItemLong = @itemLong,
  907.                 Timeout = @timeout,
  908.                 Locked = 0
  909.             WHERE SessionId = @id AND LockCookie = @lockCookie
  910.  
  911.             RETURN 0'
  912.  
  913. EXEC (@cmd)            
  914. GO
  915.  
  916.  
  917. DECLARE @ver INT
  918. EXEC GetMajorVersion @@ver=@ver OUTPUT
  919. DECLARE @cmd CHAR(8000)
  920. IF (@ver >= 8)
  921.     SET @cmd = '
  922.         CREATE PROCEDURE TempUpdateStateItemLongNullShort
  923.             @id         tSessionId,
  924.             @itemLong   tSessionItemLong,
  925.             @timeout    INT,
  926.             @lockCookie INT
  927.         AS    
  928.             UPDATE DatabaseNamePlaceHolder..ASPStateTempSessions
  929.             SET Expires = DATEADD(n, Timeout, GETUTCDATE()), 
  930.                 SessionItemLong = @itemLong, 
  931.                 SessionItemShort = NULL,
  932.                 Timeout = @timeout,
  933.                 Locked = 0
  934.             WHERE SessionId = @id AND LockCookie = @lockCookie
  935.  
  936.             RETURN 0'
  937. ELSE
  938.     SET @cmd = '
  939.     CREATE PROCEDURE TempUpdateStateItemLongNullShort
  940.         @id         tSessionId,
  941.         @itemLong   tSessionItemLong,
  942.         @timeout    INT,
  943.         @lockCookie INT
  944.     AS    
  945.         UPDATE DatabaseNamePlaceHolder..ASPStateTempSessions
  946.         SET Expires = DATEADD(n, Timeout, GETDATE()), 
  947.             SessionItemLong = @itemLong, 
  948.             SessionItemShort = NULL,
  949.             Timeout = @timeout,
  950.             Locked = 0
  951.         WHERE SessionId = @id AND LockCookie = @lockCookie
  952.  
  953.         RETURN 0'
  954.  
  955. EXEC (@cmd)            
  956. GO
  957.  
  958. CREATE PROCEDURE TempRemoveStateItem
  959.     @id     tSessionId,
  960.     @lockCookie INT
  961. AS
  962.     DELETE DatabaseNamePlaceHolder..ASPStateTempSessions
  963.     WHERE SessionId = @id AND LockCookie = @lockCookie
  964.     RETURN 0
  965. GO
  966.             
  967. DECLARE @ver INT
  968. EXEC GetMajorVersion @@ver=@ver OUTPUT
  969. DECLARE @cmd CHAR(8000)
  970. IF (@ver >= 8)
  971.     SET @cmd = '
  972.         CREATE PROCEDURE TempResetTimeout
  973.             @id     tSessionId
  974.         AS
  975.             UPDATE DatabaseNamePlaceHolder..ASPStateTempSessions
  976.             SET Expires = DATEADD(n, Timeout, GETUTCDATE())
  977.             WHERE SessionId = @id
  978.             RETURN 0'
  979. ELSE
  980.     SET @cmd = '
  981.         CREATE PROCEDURE TempResetTimeout
  982.             @id     tSessionId
  983.         AS
  984.             UPDATE DatabaseNamePlaceHolder..ASPStateTempSessions
  985.             SET Expires = DATEADD(n, Timeout, GETDATE())
  986.             WHERE SessionId = @id
  987.             RETURN 0'
  988.  
  989. EXEC (@cmd)            
  990. GO
  991.  
  992.             
  993. DECLARE @ver INT
  994. EXEC GetMajorVersion @@ver=@ver OUTPUT
  995. DECLARE @cmd CHAR(8000)
  996. IF (@ver >= 8)
  997.     SET @cmd = '
  998.         CREATE PROCEDURE DeleteExpiredSessions
  999.         AS
  1000.             DECLARE @now DATETIME
  1001.             SET @now = GETUTCDATE()
  1002.  
  1003.             DELETE DatabaseNamePlaceHolder..ASPStateTempSessions
  1004.             WHERE Expires < @now
  1005.  
  1006.             RETURN 0'
  1007. ELSE
  1008.     SET @cmd = '
  1009.         CREATE PROCEDURE DeleteExpiredSessions
  1010.         AS
  1011.             DECLARE @now DATETIME
  1012.             SET @now = GETDATE()
  1013.  
  1014.             DELETE DatabaseNamePlaceHolder..ASPStateTempSessions
  1015.             WHERE Expires < @now
  1016.  
  1017.             RETURN 0'
  1018.  
  1019. EXEC (@cmd)            
  1020. GO
  1021.             
  1022. EXECUTE CreateTempTables
  1023. GO
  1024.  
  1025. /* Create the startup procedure */
  1026. USE master
  1027. GO
  1028.  
  1029. /* Create the job to delete expired sessions */
  1030. BEGIN TRANSACTION            
  1031.     DECLARE @JobID BINARY(16)  
  1032.     DECLARE @ReturnCode INT    
  1033.     SELECT @ReturnCode = 0     
  1034.  
  1035.     -- Add job category
  1036.     IF (SELECT COUNT(*) FROM msdb.dbo.syscategories WHERE name = N'[Uncategorized (Local)]') < 1 
  1037.         EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]'
  1038.  
  1039.     -- Add the job
  1040.     EXECUTE @ReturnCode = msdb.dbo.sp_add_job 
  1041.             @job_id = @JobID OUTPUT, 
  1042.             @job_name = N'DatabaseNamePlaceHolder_Job_DeleteExpiredSessions', 
  1043.             @owner_login_name = NULL, 
  1044.             @description = N'Deletes expired sessions from the session state database.', 
  1045.             @category_name = N'[Uncategorized (Local)]', 
  1046.             @enabled = 1, 
  1047.             @notify_level_email = 0, 
  1048.             @notify_level_page = 0, 
  1049.             @notify_level_netsend = 0, 
  1050.             @notify_level_eventlog = 0, 
  1051.             @delete_level= 0
  1052.  
  1053.     IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 
  1054.     
  1055.     -- Add the job steps
  1056.     EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep 
  1057.             @job_id = @JobID,
  1058.             @step_id = 1, 
  1059.             @step_name = N'DatabaseNamePlaceHolder_JobStep_DeleteExpiredSessions', 
  1060.             @command = N'EXECUTE DeleteExpiredSessions', 
  1061.             @database_name = N'DatabaseNamePlaceHolder', 
  1062.             @server = N'', 
  1063.             @database_user_name = N'', 
  1064.             @subsystem = N'TSQL', 
  1065.             @cmdexec_success_code = 0, 
  1066.             @flags = 0, 
  1067.             @retry_attempts = 0, 
  1068.             @retry_interval = 1, 
  1069.             @output_file_name = N'', 
  1070.             @on_success_step_id = 0, 
  1071.             @on_success_action = 1, 
  1072.             @on_fail_step_id = 0, 
  1073.             @on_fail_action = 2
  1074.  
  1075.     IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 
  1076.  
  1077.     EXECUTE @ReturnCode = msdb.dbo.sp_update_job @job_id = @JobID, @start_step_id = 1 
  1078.     IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 
  1079.     
  1080.     -- Add the job schedules
  1081.     EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule 
  1082.             @job_id = @JobID, 
  1083.             @name = N'DatabaseNamePlaceHolder_JobSchedule_DeleteExpiredSessions', 
  1084.             @enabled = 1, 
  1085.             @freq_type = 4,     
  1086.             @active_start_date = 20001016, 
  1087.             @active_start_time = 0, 
  1088.             @freq_interval = 1, 
  1089.             @freq_subday_type = 4, 
  1090.             @freq_subday_interval = 1, 
  1091.             @freq_relative_interval = 0, 
  1092.             @freq_recurrence_factor = 0, 
  1093.             @active_end_date = 99991231, 
  1094.             @active_end_time = 235959
  1095.  
  1096.     IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 
  1097.     
  1098.     -- Add the Target Servers
  1099.     EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID, @server_name = N'(local)' 
  1100.     IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback 
  1101.     
  1102.     COMMIT TRANSACTION          
  1103.     GOTO   EndSave              
  1104. QuitWithRollback:
  1105.     IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION 
  1106. EndSave: 
  1107. GO
  1108.  
  1109.